--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / Sideband.git / files / sbapp / kivymd / uix / segmentedbutton / segmentedbutton.py
Displaying Raw • Download
sbapp/kivymd/uix/segmentedbutton/segmentedbutton.py 67a8f61af8bdd2583ef8ed24d6ad80d7e39ae677 (67a8f61a) Text, 19.12 KB
T8b949e"""
Components/SegmentedButton
==========================
.. versionadded:: 1.2.0
.. seealso::
`Material Design spec, Segmented buttons <https://m3.material.io/components/segmented-buttons/overview>`_
`Segmented control <https://kivymd.readthedocs.io/en/latest/components/segmentedcontrol/>`_
.. rubric:: Segmented buttons help people select options, switch views,
or sort elements.
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/segmented-button-preview.png
:align: center
Usage
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
.. code-block:: kv
MDScreen:
MDSegmentedButton:
MDSegmentedButtonItem:
icon: ...
text: ...
MDSegmentedButtonItem:
icon: ...
text: ...
MDSegmentedButtonItem:
icon: ...
text: ...
Example
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
.. code-block:: python
from kivy.lang import Builder
from kivymd.app import MDApp
KV = '''
MDScreen:
MDSegmentedButton:
pos_hint: {"center_x": .5, "center_y": .5}
MDSegmentedButtonItem:
text: "Walking"
MDSegmentedButtonItem:
text: "Transit"
MDSegmentedButtonItem:
text: "Driving"
'''
class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
return Builder.load_string(KV)
Example().run()
By default, segmented buttons support single marking of elements:
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/segmented-button-multiselect-false.gif
:align: center
For multiple marking of elements, use the
:attr:`kivymd.uix.segmentedbutton.segmentedbutton.MDSegmentedButton.multiselect`
parameter:
.. code-block:: kv
MDSegmentedButton:
multiselect: True
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/segmented-button-multiselect-true.gif
:align: center
Control width
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The width of the panel of segmented buttons will be equal to the width
of the texture of the widest button multiplied by the number of buttons:
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/segmented-button-width-by-default.png
:align: center
But you can use the `size_hint_x` parameter to specify the relative width:
.. code-block:: kv
MDSegmentedButton:
size_hint_x: .9
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/segmented-button-width-size-hint-x.png
:align: center
Customization
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
You can see below in the documentation from which classes the
:class:`~kivymd.uix.segmentedbutton.segmentedbutton.MDSegmentedButton` and
:class:`~kivymd.uix.segmentedbutton.segmentedbutton.MDSegmentedButtonItem`
classes are inherited and use all their attributes such as
`md_bg_color`, `md_bg_color` etc. for additional customization of segments.
Events
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked on_marked
The method is called when a segment is marked.
on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked on_unmarked
The method is called when a segment is unmarked.
.. code-block:: kv
MDSegmentedButton:
on_marked: app.on_marked(*args)
.. code-block:: python
def on_marked(
self,
segment_button: MDSegmentedButton,
segment_item: MDSegmentedButtonItem,
marked: bool,
) -> None:
print(segment_button)
print(segment_item)
print(marked)
A practical example
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
.. code-block:: python
import os
from faker import Faker
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.segmentedbutton import MDSegmentedButton, MDSegmentedButtonItem
from kivymd.utils import asynckivy
KV = '''
<UserCard>
adaptive_height: True
md_bg_color: "#343930"
radius: 16
TwoLineAvatarListItem:
id: item
divider: None
_no_ripple_effect: True
text: root.name
secondary_text: root.path_to_file
theme_text_color: "Custom"
text_color: "#8A8D79"
secondary_theme_text_color: self.theme_text_color
secondary_text_color: self.text_color
on_size:
self.ids._left_container.size = (item.height, item.height)
self.ids._left_container.x = dp(6)
self._txt_right_pad = item.height + dp(12)
ImageLeftWidget:
source: root.album
radius: root.radius
MDScreen:
md_bg_color: "#151514"
MDBoxLayout:
orientation: "vertical"
padding: "12dp"
spacing: "12dp"
MDLabel:
adaptive_height: True
text: "Your downloads"
font_style: "H5"
theme_text_color: "Custom"
text_color: "#8A8D79"
MDSegmentedButton:
size_hint_x: 1
selected_color: "#303A29"
line_color: "#343930"
on_marked: app.on_marked(*args)
MDSegmentedButtonItem:
text: "Songs"
active: True
MDSegmentedButtonItem:
text: "Albums"
MDSegmentedButtonItem:
text: "Podcasts"
RecycleView:
id: card_list
viewclass: "UserCard"
bar_width: 0
RecycleBoxLayout:
orientation: 'vertical'
spacing: "16dp"
padding: "16dp"
default_size: None, dp(72)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
'''
class UserCard(MDBoxLayout):
name = StringProperty()
path_to_file = StringProperty()
album = StringProperty()
class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
return Builder.load_string(KV)
def on_marked(
self,
segment_button: MDSegmentedButton,
segment_item: MDSegmentedButtonItem,
marked: bool,
) -> None:
self.generate_card()
def generate_card(self):
async def generate_card():
for i in range(10):
await asynckivy.sleep(0)
self.root.ids.card_list.data.append(
{
"name": fake.name(),
"path_to_file": f"{os.path.splitext(fake.file_path())[0]}.mp3",
"album": fake.image_url(),
}
)
fake = Faker()
self.root.ids.card_list.data = []
Clock.schedule_once(lambda x: asynckivy.start(generate_card()))
Example().run()
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/segmented-button-practical-example.gif
:align: center
"""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Te6edf3__all__ Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffMDSegmentedButtonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMDSegmentedButtonItemTa5d6ff"Tb4b4b4)
Tff7b72import T7ee787os
Tff7b72from T7ee787kivyT7ee787.T7ee787animation Tff7b72import Te6edf3Animation
Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787kivyT7ee787.T7ee787lang Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Tb4b4b4(
Te6edf3BooleanPropertyTb4b4b4,
Te6edf3ColorPropertyTb4b4b4,
Te6edf3ListPropertyTb4b4b4,
Te6edf3NumericPropertyTb4b4b4,
Te6edf3StringPropertyTb4b4b4,
Te6edf3VariableListPropertyTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787behaviors Tff7b72import Te6edf3ButtonBehavior
Tff7b72from T7ee787kivymd Tff7b72import Te6edf3uix_path
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787behaviors Tff7b72import Te6edf3RectangularRippleBehaviorTb4b4b4, Te6edf3ScaleBehavior
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787boxlayout Tff7b72import Te6edf3MDBoxLayout
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787floatlayout Tff7b72import Te6edf3MDFloatLayout
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787label Tff7b72import Te6edf3MDIcon
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3uix_pathTb4b4b4, Ta5d6ff"Ta5d6ffsegmentedbuttonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsegmentedbutton.kvTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3kv_fileTb4b4b4:
Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3kv_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72class T56d364MDSegmentedButtonItemTb4b4b4(
Te6edf3RectangularRippleBehaviorTb4b4b4, Te6edf3ButtonBehaviorTb4b4b4, Te6edf3MDFloatLayout
Tb4b4b4)Tb4b4b4:
T8b949e"""
Segment button item.
For more information, see in the
:class:`~kivymd.uix.behaviors.RectangularRippleBehavior` and
:class:`~kivy.uix.behaviors.ButtonBehavior` and
:class:`~kivymd.uix.boxlayout.MDBoxLayout`
class documentation.
"""
Te6edf3icon Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Icon segment.
:attr:`icon` is an :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""
Te6edf3text Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
Text segment.
:attr:`text` is an :class:`~kivy.properties.StringProperty`
and defaults to `''`.
"""
Te6edf3active Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
T8b949e"""
Background color of an disabled segment.
:attr:`active` is an :class:`~kivy.properties.BooleanProperty`
and defaults to `False`.
"""
Te6edf3disabled_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
Is active segment.
:attr:`active` is an :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""
Te6edf3_no_ripple_effect Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3_current_icon Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3_current_md_bg_color Tff7b72= Tff7b72None
Tff7b72def Td2a8ffon_disabledTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3valueTb4b4b4: Tffa657boolTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72def Td2a8ffon_disabledTb4b4b4(Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3valueTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_current_md_bg_colorTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_current_md_bg_color Tff7b72= Tff7b72selfTff7b72.Td2a8ffmd_bg_color
Tff7b72selfTff7b72.Td2a8ffmd_bg_color Tff7b72= Tb4b4b4(
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffdisabled_hint_text_color
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffdisabled_color
Tff7b72else Tff7b72selfTff7b72.Td2a8ffdisabled_color
Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_current_md_bg_colorTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmd_bg_color Tff7b72= Tff7b72selfTff7b72.Td2a8ff_current_md_bg_color
Tff7b72selfTff7b72.Td2a8ff_current_md_bg_color Tff7b72= Tff7b72None
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3on_disabledTb4b4b4)
Tff7b72def Td2a8ffon_iconTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3icon_nameTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3icon_name Tff7b72!= Ta5d6ff"Ta5d6ffcheckTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_current_icon Tff7b72= Te6edf3icon_name
T8b949e# TODO:
T8b949e# Add the feature to use both text and icons in segments -
T8b949e# https://m3.material.io/components/segmented-buttons/guidelines#26abac1c-c6bd-44c1-a969-8c910c880b98
T8b949e# Icons: optional check icon to indicate selected state -
T8b949e# https://m3.material.io/components/segmented-buttons/overview#7b80f313-7d3a-4865-b26c-1f7ec98ba694
T8b949e# Hovered: add a color for the hovered segment -
T8b949e# https://m3.material.io/components/segmented-buttons/specs#d730b3ba-c59e-4ef8-b652-20979fe20b67
T8b949e# Density: Each step down in density removes 4dp from the height -
T8b949e# https://m3.material.io/components/segmented-buttons/specs#2d5cab36-1deb-40bd-9e37-bc2bb1657009
Tff7b72class T56d364MDSegmentedButtonTb4b4b4(Te6edf3MDBoxLayoutTb4b4b4)Tb4b4b4:
T8b949e"""
Segment button panel.
For more information, see in the
:class:`~kivymd.uix.boxlayout.MDBoxLayout` class documentation.
:Events:
`on_marked`
The method is called when a segment is marked.
`on_unmarked`
The method is called when a segment is unmarked.
"""
Te6edf3radius Tff7b72= Te6edf3VariableListPropertyTb4b4b4(Tb4b4b4[T79c0ff20Tb4b4b4]Tb4b4b4, Te6edf3lengthTff7b72=T79c0ff4Tb4b4b4)
T8b949e"""
Panel radius.
:attr:`radius` is an :class:`~kivy.properties.VariableListProperty`
and defaults to `[20, 20, 20, 20]`.
"""
Te6edf3multiselect Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
T8b949e"""
Do I allow multiple segment selection.
:attr:`multiselect` is an :class:`~kivy.properties.BooleanProperty`
and defaults to `False`.
"""
Te6edf3hiding_icon_transition Tff7b72= Te6edf3StringPropertyTb4b4b4(Ta5d6ff"Ta5d6fflinearTa5d6ff"Tb4b4b4)
T8b949e"""
Name of the transition hiding the current icon.
:attr:`hiding_icon_transition` is a :class:`~kivy.properties.StringProperty`
and defaults to `'linear'`.
"""
Te6edf3hiding_icon_duration Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0.05Tb4b4b4)
T8b949e"""
Duration of hiding the current icon.
:attr:`hiding_icon_duration` is a :class:`~kivy.properties.NumericProperty`
and defaults to `0.05`.
"""
Te6edf3opening_icon_transition Tff7b72= Te6edf3StringPropertyTb4b4b4(Ta5d6ff"Ta5d6fflinearTa5d6ff"Tb4b4b4)
T8b949e"""
The name of the transition that opens a new icon of the "marked" type.
:attr:`opening_icon_transition` is a :class:`~kivy.properties.StringProperty`
and defaults to `'linear'`.
"""
Te6edf3opening_icon_duration Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0.05Tb4b4b4)
T8b949e"""
The duration of opening a new icon of the "marked" type.
:attr:`opening_icon_duration` is a :class:`~kivy.properties.NumericProperty`
and defaults to `0.05`.
"""
Te6edf3selected_items Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
The list of :class:`~MDSegmentedButtonItem` objects that are currently
marked.
:attr:`selected_items` is a :class:`~kivy.properties.ListProperty`
and defaults to `[]`.
"""
Te6edf3selected_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
Color of the marked segment.
:attr:`selected_color` is a :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffregister_event_typeTb4b4b4(Ta5d6ff"Ta5d6ffon_markedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffregister_event_typeTb4b4b4(Ta5d6ff"Ta5d6ffon_unmarkedTa5d6ff"Tb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmark_segmentTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffadjust_segment_radiusTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffadjust_segment_panel_widthTb4b4b4, T79c0ff2Tb4b4b4)
Tff7b72def Td2a8ffmark_segmentTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Programmatically marks a segment."""
Tff7b72for Te6edf3widget Tff7b72in Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72if Te6edf3widgetTff7b72.Td2a8ffactiveTb4b4b4:
Te6edf3widgetTff7b72.Td2a8ffactive Tff7b72= Tff7b72False
Te6edf3widgetTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_releaseTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffmultiselectTb4b4b4:
Tff7b72break
Tff7b72def Td2a8ffadjust_segment_radiusTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Rounds off the first and last elements."""
Tff7b72if Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffradius Tff7b72== Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffradius Tff7b72= Tb4b4b4(T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffheight Tff7b72/ T79c0ff2Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffheight Tff7b72/ T79c0ff2Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffradius Tff7b72== Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffradius Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffheight Tff7b72/ T79c0ff2Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffheight Tff7b72/ T79c0ff2Tb4b4b4)
Tff7b72def Td2a8ffadjust_segment_panel_widthTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Sets the width of all segments and the width of the panel
by the widest segment.
"""
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffsize_hint_xTb4b4b4:
Te6edf3width_list Tff7b72= Tb4b4b4[
Te6edf3widgetTff7b72.Td2a8ffidsTff7b72.Td2a8fflabel_textTff7b72.Td2a8fftexture_sizeTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72+ Tb4b4b4(Te6edf3dpTb4b4b4(T79c0ff72Tb4b4b4) Tff7b72if Te6edf3widgetTff7b72.Td2a8fficon Tff7b72else Te6edf3dpTb4b4b4(T79c0ff48Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3widget Tff7b72in Tff7b72selfTff7b72.Td2a8ffchildren
Tb4b4b4]
Te6edf3max_width Tff7b72= Tffa657maxTb4b4b4(Te6edf3width_listTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidth Tff7b72= Te6edf3max_width Tff7b72* Tffa657lenTb4b4b4(Te6edf3width_listTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3max_width Tff7b72= Tff7b72selfTff7b72.Td2a8ffwidth Tff7b72/ Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4)
Tff7b72for Te6edf3widget Tff7b72in Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4:
Te6edf3widgetTff7b72.Td2a8ffwidth Tff7b72= Te6edf3max_width
Tff7b72selfTff7b72.Td2a8ffopacity Tff7b72= T79c0ff1
Tff7b72for Te6edf3widget Tff7b72in Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72if Te6edf3widgetTff7b72.Td2a8ffactiveTb4b4b4:
Te6edf3widgetTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_releaseTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffshift_segment_textTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3segment_itemTb4b4b4: Te6edf3MDSegmentedButtonItemTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Shifts the segment text to the right, thus freeing up space
for the icon (when the segment is marked).
"""
Te6edf3AnimationTb4b4b4(
Te6edf3xTff7b72=Tb4b4b4(
Te6edf3segment_itemTff7b72.Td2a8ffidsTff7b72.Td2a8fflabel_textTff7b72.Td2a8ffx
Tff7b72+ Tb4b4b4(
Te6edf3dpTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3segment_itemTff7b72.Td2a8fficon Tff7b72and Tff7b72not Te6edf3segment_itemTff7b72.Td2a8ffactive
Tff7b72else T79c0ff0
Tb4b4b4)
Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3segment_itemTff7b72.Td2a8ffactive
Tff7b72else Tb4b4b4(
Te6edf3segment_itemTff7b72.Td2a8ffidsTff7b72.Td2a8fflabel_textTff7b72.Td2a8ffx
Tff7b72- Tb4b4b4(
Te6edf3dpTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3segment_itemTff7b72.Td2a8fficon Tff7b72and Te6edf3segment_itemTff7b72.Td2a8ffactive
Tff7b72else T79c0ff0
Tb4b4b4)
Tb4b4b4)Tb4b4b4,
Te6edf3dTff7b72=T79c0ff0.2Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Te6edf3segment_itemTff7b72.Td2a8ffidsTff7b72.Td2a8fflabel_textTb4b4b4)
Tff7b72def Td2a8ffshow_icon_marked_segmentTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3segment_itemTb4b4b4: Te6edf3MDSegmentedButtonItem
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Sets the icon for the marked segment and changes the icon scale
to the normal scale.
"""
Te6edf3segment_itemTff7b72.Td2a8ffidsTff7b72.Td2a8ffscale_iconTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72if Te6edf3segment_itemTff7b72.Td2a8ffidsTff7b72.Td2a8ffscale_iconTff7b72.Td2a8fficon Tff7b72== Ta5d6ff"Ta5d6ffcheckTa5d6ff" Tff7b72and Te6edf3segment_itemTff7b72.Td2a8ffactiveTb4b4b4:
Te6edf3segment_itemTff7b72.Td2a8ffidsTff7b72.Td2a8ffscale_iconTff7b72.Td2a8fficon Tff7b72= Te6edf3segment_itemTff7b72.Td2a8ff_current_icon
Te6edf3AnimationTb4b4b4(
Te6edf3scale_value_xTff7b72=T79c0ff1Tb4b4b4,
Te6edf3scale_value_yTff7b72=T79c0ff1Tb4b4b4,
Te6edf3dTff7b72=Tff7b72selfTff7b72.Td2a8ffopening_icon_durationTb4b4b4,
Te6edf3tTff7b72=Tff7b72selfTff7b72.Td2a8ffopening_icon_transitionTb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Te6edf3segment_itemTff7b72.Td2a8ffidsTff7b72.Td2a8ffscale_iconTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshift_segment_textTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_selected_segment_listTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_bg_marked_segmentTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72def Td2a8ffhide_icon_marked_segmentTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3segment_itemTb4b4b4: Te6edf3MDSegmentedButtonItem
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Changes the scale of the icon of the marked segment to zero."""
Te6edf3anim Tff7b72= Te6edf3AnimationTb4b4b4(
Te6edf3scale_value_xTff7b72=T79c0ff0Tb4b4b4,
Te6edf3scale_value_yTff7b72=T79c0ff0Tb4b4b4,
Te6edf3dTff7b72=Tff7b72selfTff7b72.Td2a8ffhiding_icon_durationTb4b4b4,
Te6edf3tTff7b72=Tff7b72selfTff7b72.Td2a8ffhiding_icon_transitionTb4b4b4,
Tb4b4b4)
Te6edf3animTff7b72.Td2a8ffbindTb4b4b4(
Te6edf3on_completeTff7b72=Tff7b72lambda Te6edf3xTb4b4b4, Te6edf3yTb4b4b4: Tff7b72selfTff7b72.Td2a8ffshow_icon_marked_segmentTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tb4b4b4)
Te6edf3animTff7b72.Td2a8ffstartTb4b4b4(Te6edf3segment_itemTff7b72.Td2a8ffidsTff7b72.Td2a8ffscale_iconTb4b4b4)
Tff7b72def Td2a8ffrestore_bg_segmentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3segment_itemTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3AnimationTb4b4b4(Te6edf3md_bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffmd_bg_colorTb4b4b4, Te6edf3dTff7b72=T79c0ff0.2Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72def Td2a8ffset_bg_marked_segmentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3segment_itemTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3segment_itemTff7b72.Td2a8ffactiveTb4b4b4:
Te6edf3AnimationTb4b4b4(
Te6edf3md_bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffselected_color
Tff7b72if Tff7b72selfTff7b72.Td2a8ffselected_color
Tff7b72else Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffprimary_colorTb4b4b4,
Te6edf3dTff7b72=T79c0ff0.2Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72def Td2a8ffset_selected_segment_listTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3segment_itemTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3segment_itemTff7b72.Td2a8ffactive Tff7b72= Tff7b72not Te6edf3segment_itemTff7b72.Td2a8ffactive
Tff7b72if Te6edf3segment_itemTff7b72.Td2a8ffactiveTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffselected_itemsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_markedTa5d6ff"Tb4b4b4, Te6edf3segment_itemTb4b4b4, Te6edf3segment_itemTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3segment_item Tff7b72in Tff7b72selfTff7b72.Td2a8ffselected_itemsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffselected_itemsTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_unmarkedTa5d6ff"Tb4b4b4, Te6edf3segment_itemTb4b4b4, Te6edf3segment_itemTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72def Td2a8ffmark_itemTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3segment_itemTb4b4b4: Te6edf3MDSegmentedButtonItemTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3segment_itemTff7b72.Td2a8ffactive Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffmultiselectTb4b4b4:
Tff7b72return
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffmultiselect Tff7b72and Tff7b72selfTff7b72.Td2a8ffselected_itemsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffuncheck_itemTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3segment_itemTff7b72.Td2a8ffactiveTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrestore_bg_segmentTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhide_icon_marked_segmentTb4b4b4(Te6edf3segment_itemTb4b4b4)
Tff7b72def Td2a8ffuncheck_itemTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3item Tff7b72in Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72if Te6edf3itemTff7b72.Td2a8ffactiveTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhide_icon_marked_segmentTb4b4b4(Te6edf3itemTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrestore_bg_segmentTb4b4b4(Te6edf3itemTb4b4b4)
Tff7b72break
Tff7b72def Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3widgetTb4b4b4, Te6edf3MDSegmentedButtonItemTb4b4b4)Tb4b4b4:
Te6edf3widgetTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffmark_itemTb4b4b4)
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72def Td2a8ffon_sizeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instance_segment_buttonTb4b4b4, Te6edf3sizeTb4b4b4: Tffa657listTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called when the root screen is resized."""
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsize_hint_xTb4b4b4:
Te6edf3max_width Tff7b72= Te6edf3sizeTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72/ Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4)
Tff7b72for Te6edf3widget Tff7b72in Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4:
Te6edf3widgetTff7b72.Td2a8ffwidth Tff7b72= Te6edf3max_width
Tff7b72def Td2a8ffon_markedTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
T8b949e"""The method is called when a segment is marked."""
Tff7b72def Td2a8ffon_unmarkedTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
T8b949e"""The method is called when a segment is unmarked."""
Tff7b72class T56d364SegmentButtonIconTb4b4b4(Te6edf3MDIconTb4b4b4, Te6edf3ScaleBehaviorTb4b4b4)Tb4b4b4:
T8b949e"""Implements an icon with scaling behavior."""
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────